/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package userservercontroller;

import autorization.RegistrationFailed;
import java.rmi.Remote;
import java.rmi.RemoteException;

/**
 * Интерфейс, доминирующий основные клиентские сервисы авторизационной службы
 * @author ID=1008, Ustinov
 */
public interface IAutorizationClient extends Remote {

    /** Попытка регистрация на сервере.
     * @param login - имя учётной записи
     * @param password - пароль пользователя
     * @return - возвращается авторизационный ключ.
     * @throws RegistrationFailed - возвращается в случае, если регистрация по какой-либо причине невозможна.
     * @throws RemoteException - если произошла ошибка соединения
     */
    public long tryRegistration(String login, String password) throws RemoteException,RegistrationFailed;
    
    /** Попытка авторизации на сервере
     * @param login - имя учётной записи
     * @param password - пароль пользователя
     * @return - авторизационный ключ, если авторизация прошла успешно, иначе возвращается значение -1
     * @throws RemoteException - если произошла ошибка соединения
    */
    public long tryAuthorization(String login, String password) throws RemoteException;

    /** Изменение пароля к учётной записи
     * @param authorizationKey - ключ авторизации, полученный либо при регистрации, либо при авторизации на сервере.
     * @param OldPassword - старый пароль пользователя
     * @param NewPassword - новый пароль.
     * @return - возвращается true, если пароль успешно изменён, false - иначе.
     * @throws RegistrationFailed - если старые входные параметры не соответствуют хранящимся в базе сервера.
     */
    public boolean modifyMyPassword(long authorizationKey, String NewPassword) throws RegistrationFailed, RemoteException;

    /**
     * Изменение имени учётной записи
     * @param authorizationKey - ключ авторизации, полученный либо при регистрации, либо при авторизации на сервере.
     * @param NewLogin - новый логин
     * @return
     * @throws autorization.RegistrationFailed
     * @throws java.rmi.RemoteException
     */
    public boolean modifyMyLogin(long authorizationKey, String NewLogin) throws RegistrationFailed, RemoteException;

    /** Получение роли своего логина
     * @param authorizationKey
     * @param login
     * @return
     * @throws java.rmi.RemoteException
     */
    public String getMyRole(long authorizationKey) throws RemoteException;

    /**
     * Удалить свою учётную запись из таблицы
     * @param authorizationKey - авторизационный ключ
     * @return true - в случае успеха, false в случае некорректности авторизационного ключа
     * @throws java.rmi.RemoteException  - ошибка соединения
     * @throws autorization.RegistrationFailed - неверный авторизационный ключ
     */
    public boolean unregistration(long authorizationKey) throws RemoteException, RegistrationFailed;

    /**
     * Отмена авторизации
     * @author ID=1008, Ustinov
     * @param authorizationKey - авторизационный ключ
     * @return true - в случае успеха, false в случае некорректности авторизационного ключа
     */
    public boolean logoff(long authorizationKey) throws RemoteException;
}
